package br.com.gaspar.batepapo.mb;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import br.com.gaspar.batepapo.bo.iface.IProjetoBO;
import br.com.gaspar.batepapo.modelo.BatePapo;
import br.com.gaspar.batepapo.modelo.Mensagem;
import br.com.gaspar.batepapo.modelo.Usuario;
import br.com.gaspar.framework.modelo.IBaseBO;
import br.com.gaspar.framework.visao.jsf.ManagedBeanBase;
import br.com.gaspar.utils.exception.BaseException;

@ManagedBean(name="UsuarioMB")
@SessionScoped
public class UsuarioMB extends ManagedBeanBase<Usuario>{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@EJB
	private IProjetoBO<Usuario> bo;
	
	@ManagedProperty(value="#{BatePapoMB}")
	private BatePapoMB batePapoMB;
	
	private Boolean usuarioAutenticado;
	
	public String login(){
		//codigo de autenticacao
		String retorno = null;
		try {
			Usuario usuario = getFachada().buscarPorNamedQuery("Usuario.buscarPorNome", getEntidade().getNome());
			if(usuario == null){
				adicionarMensagem("Usuário não possui cadastro/senha não confere!", FacesMessage.SEVERITY_ERROR);
			}
			if(usuario.getSenha().equals(getEntidade().getSenha())){
				retorno = "batePapo";
			}
		} catch (BaseException e) {
			
		}
		getBatePapoMB().getBo().registrarUsuario(getEntidade());
		setEntidadeAutenticado(true);
		
		return retorno;
	}
	
	public void logout(){
		getBatePapoMB().getBo().removerUsuario(getEntidade());
		setEntidade(new Usuario());
		setEntidadeAutenticado(false);
	}
	
	public Integer getPosicaoUsuario(){
		return getBatePapoMB().getBo().getPosicaoUsuario(getEntidade()) + 1;
	}
	
	public void iniciarBatePapo(){
		if(getBatePapoMB().getBatePapo() == null){
			getBatePapoMB().setBatePapo(new BatePapo());
		}
		getBatePapoMB().getBatePapo().setCodigo(getEntidade().getEmail());
		
		if(getBatePapoMB().getMensagem() == null){
			getBatePapoMB().setMensagem(new Mensagem());
		}
		getBatePapoMB().getMensagem().setUsuario(getEntidade());
	}

	public BatePapoMB getBatePapoMB() {
		return batePapoMB;
	}

	public void setBatePapoMB(BatePapoMB batePapoMB) {
		this.batePapoMB = batePapoMB;
	}

	public Boolean getEntidadeAutenticado() {
		return usuarioAutenticado;
	}

	public void setEntidadeAutenticado(Boolean usuarioAutenticado) {
		this.usuarioAutenticado = usuarioAutenticado;
	}

	@Override
	protected IBaseBO<Usuario> getFachada() {
		return this.bo;
	}
	
	@Override
	protected void gravarApos() throws BaseException {
		setEntidade(new Usuario());
	}

}
